//*******************************************************************
//  TowerOfHanoi.java   Java Foundations
//
//  Represents the classic Towes of Hanoi puzzle.
//*******************************************************************

public class TowersOfHanoi
{
   private int totalDisks;
   //---------------------------------------------------------------
   //  Sets up the puzzle with the specified number of disks.
   //---------------------------------------------------------------
   public TowersOfHanoi (int disks)
   {
       totalDisks = disks;
   }
   //---------------------------------------------------------------------------
   //  Performs the initial call move to vplve the puzzle.
   //  Moves the disks from tower 1 to 3 using tower 2.
   //---------------------------------------------------------------------------
   public void solve ()
   {
      moveTower (totalDisks, 1, 3, 2);
   }
   //---------------------------------------------------------------------------
   //  Moves the specified number of disks from one tower to another
   //  by moving a subtower of n-1 disks out of the way, moving one
   //  disk,then moving the subtower back. Base case of 1 dosk.
   //---------------------------------------------------------------------------
   private void moveTower (int numDisks, int start, int end, int temp)
   {
      if (numDisks == 1)
         moveOneDisk (start, end);
      else
       {
         moveTower (numDisks-1, start, temp, end);
         moveOneDisk (start, end);
         moveTower (numDisks-1, temp, end, start);
       }
   }
    //----------------------------------------------------------------------
    // Prints instructions to move one disk from the specified start
    // tower to the specified end tower.
    //----------------------------------------------------------------------
    private void moveOneDisk (int start, int end)
    {
        System.out.println ("Move one disk from " + start + " to " +
                          end );
    }
}
